<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			let arr = [
				{id: 1, name: '部门1', pid: 0},
				{id: 2, name: '部门2', pid: 1},
				{id: 3, name: '部门3', pid: 1},
				{id: 4, name: '部门4', pid: 3},
				{id: 5, name: '部门5', pid: 4},
			]
			
			
			function transformArr(){
				// 创建一个即将要生成的数组
				let newArr = []
				// 循环遍历每一个内容，然后决定要插入到哪个位置
				arr.forEach((item,i)=>{
					// 调用插入模式
					insertArr(item,newArr)
				})
				
				function insertArr(item,newArr){
					// 如果是一个新的数组，就直接插入
					if(newArr.length==0){
						newArr.push(item)
					}
					// 如果是有数据就遍历，并且递归遍历里面的children数组
					newArr.forEach((ele,i)=>{
						// 如果相同pid和id相同就往里面插入元素
						if(item.pid==ele.id){
							if(!ele.children){
								ele.children = [];
							}
							ele.children.push(item)
							return;
						}
						
						// 继续深入遍历children里面的数组
						if(ele.children){
							insertArr(item,ele.children)
						}
					})
				}
				return newArr
			}
			
			
			console.log(transformArr(arr))
		</script>
	</body>
</html>
